#include <stdio.h>
#include <stdlib.h>

#define ErrorCode -1 /* 假设正常元素值均不为 -1 */
typedef int ElemSet;

typedef struct ListNode *Position; /* 指针即结点位置 */
struct ListNode {
    ElemSet data; /* 存储数据*/
    Position next; /* 线性表中下一个元素的位置 */
};
typedef struct HeadNode *List;
struct HeadNode {
    Position head; /* 单链表头指针 */
    int length; /* 表长 */
};

/* 算法2-5：返回单链表list中第i个元素值  Get (list, i) */
ElemSet Get(List list, int i) {
    /* i是待查找元素在链表中的位序，从1开始 */
    Position p;
    int counter;

    if ((list->head == NULL) || (i == 0)) {
        return ErrorCode; /* 空表或查找位置不合法 */
    }
    p = list->head;
    counter = 1;
    while ((p != NULL) && (counter < i)) {
        p = p->next; /* 指针后移 */
        counter++; /* 结点计数 */
    }
    if (p != NULL) { /* 以counter等于i退出while循环 */
        return p->data; /* 返回第i个元素值 */
    } else { /* 不存在第 i 个元素 */
        return ErrorCode;
    }
}
/* 算法2-5 结束 */

int main(void) {
    int i, n;
    Position tmp;
    List list;

    list = (List)malloc(sizeof(struct HeadNode));
    list->head = NULL;
    scanf("%d", &n);
    list->length = n;
    for (i = 0; i < n; i++) {
        tmp = (Position)malloc(sizeof(struct ListNode));
        scanf("%d", &tmp->data); /* 读入一个结点的数据 */
        tmp->next = list->head; /* 将新结点插入链表头 */
        list->head = tmp;
    }
    scanf("%d", &i);
    printf("%d\n", Get(list, i));
    return 0;
}